<?php
require_once __DIR__ . '/../config/database.php';

set_time_limit(300);

$db = new Database();
$conn = $db->getConnection();

// 🔥 GROUP TEKNISI
$groupTeknisi = "120363427232707228@g.us";

// ======================
// 🔥 FUNCTION WA
// ======================
if (!function_exists('kirimWA')) {
function kirimWA($target, $pesan) {
    if (!$target) return;

    $token = "XjC9oSr4jECWG93JQRWf";

    $data = [
        "target" => $target,
        "message" => $pesan,
    ];

    $curl = curl_init();

    curl_setopt_array($curl, [
        CURLOPT_URL => "https://api.fonnte.com/send",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query($data),
        CURLOPT_HTTPHEADER => [
            "Authorization: $token"
        ],
        CURLOPT_TIMEOUT => 10
    ]);

    curl_exec($curl);
    curl_close($curl);
}
}

// ======================
// 🔥 TEST MODE (OPSIONAL)
// ======================
$TEST_MODE = false;

// ======================
// 🔥 AMBIL DATA DARI DATABASE (JOIN HISTORY)
// ======================
$stmt = $conn->query("
    SELECT 
        f.id,
        f.name,
        f.sn_onu,
        f.latitude,
        f.longitude,
        f.customer_phone,

        o.rx_power,
        o.voltage,
        o.updated_at

    FROM ftth_items f

    LEFT JOIN onu_daily_history o 
        ON o.sn = f.sn_onu

    INNER JOIN item_types it 
        ON it.id = f.item_type_id

    WHERE f.sn_onu IS NOT NULL
      AND LOWER(it.name) = 'pelanggan'
");

$dataItems = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($dataItems as $item) {

    usleep(200000);

    $sn   = strtoupper(trim($item['sn_onu']));
    $nama = $item['name'];
    $lat  = $item['latitude'];
    $lng  = $item['longitude'];
    $phone = $item['customer_phone'];

    // ======================
    // 🔥 AMBIL RX & VOLT DARI DB
    // ======================
    $rx = isset($item['rx_power']) ? floatval($item['rx_power']) : null;
    $volt = isset($item['voltage']) ? floatval($item['voltage']) : null;

    if ($rx === null && $volt === null) {
        continue;
    }

    // ======================
    // 🔥 STATUS DETEKSI
    // ======================
    $isBadRx   = ($rx !== null && $rx <= -25.99);
    $isBadVolt = ($volt !== null && $volt < 3.29);

    echo "DEBUG $sn | RX:$rx | Volt:$volt<br>";

    if (!$isBadRx && !$isBadVolt) {
        continue;
    }

    // ======================
    // 🔥 CEK ANTI SPAM LOG
    // ======================
    $cek = $conn->prepare("
        SELECT last_rx, last_voltage 
        FROM notif_device_log 
        WHERE sn = ?
    ");
    $cek->execute([$sn]);
    $last = $cek->fetch(PDO::FETCH_ASSOC);

    $lastRx   = $last['last_rx'] ?? null;
    $lastVolt = $last['last_voltage'] ?? null;

    $isChanged = ($lastRx != $rx || $lastVolt != $volt);

    if (!$isChanged) {
        continue;
    }

    // ======================
    // 🔥 MAPS
    // ======================
    $maps = ($lat && $lng)
        ? "https://www.google.com/maps?q={$lat},{$lng}"
        : "-";

    // ======================
    // 🔥 FORMAT NOMOR
    // ======================
    $phoneFix = null;
    if ($phone) {
        $phoneFix = preg_replace('/[^0-9]/', '', $phone);
        if (substr($phoneFix, 0, 1) == '0') {
            $phoneFix = '62' . substr($phoneFix, 1);
        }
    }

    // ======================
    // 🔥 NOTIFIKASI
    // ======================

    if ($isBadRx && $isBadVolt) {

        kirimWA($phoneFix,
            "🚨 *Gangguan Jaringan & Perangkat*\n\n" .
            "Yth. {$nama},\n" .
            "📉 RX: " . number_format($rx,2) . " dBm\n" .
            "🔌 Volt: " . number_format($volt,2) . " V\n\n" .
            "Gangguan pada jaringan & perangkat terdeteksi.\n" .
            "Estimasi perbaikan ±2 jam.\n\n" .
            "Mohon maaf 🙏"
        );

        kirimWA($groupTeknisi,
            "🚨 *DOUBLE ISSUE*\n\n" .
            "👤 {$nama}\n" .
            "📉 RX: {$rx} dBm\n" .
            "🔌 Volt: " . number_format($volt,2) . " V\n\n" .
            "📡 Gangguan IKR + ONU\n" .
            "📍 {$maps}\n\n" .
            "⚠ PRIORITAS TINGGI"
        );

    } elseif ($isBadRx) {

        kirimWA($phoneFix,
            "🚨 *Gangguan Jaringan*\n\n" .
            "Yth. {$nama},\n" .
            "📉 RX: {$rx} dBm\n\n" .
            "Terjadi gangguan pada jalur fiber.\n" .
            "Tim akan segera ke lokasi.\n"
        );

        kirimWA($groupTeknisi,
            "🚨 *REDAMAN TIDAK NORMAL*\n\n" .
            "👤 {$nama}\n" .
            "📉 RX: {$rx} dBm\n" .
            "📍 {$maps}"
        );

    } elseif ($isBadVolt) {

        kirimWA($phoneFix,
            "⚡ *Perangkat Bermasalah*\n\n" .
            "Yth. {$nama},\n" .
            "🔌 Volt: " . number_format($volt,2) . " V\n\n" .
            "Indikasi power tidak stabil.\n"
        );

        kirimWA($groupTeknisi,
            "⚡ *VOLTAGE TIDAK NORMAL*\n\n" .
            "👤 {$nama}\n" .
            "🔌 Volt: " . number_format($volt,2) . " V\n" .
            "📍 {$maps}"
        );
    }

    // ======================
    // 🔥 UPDATE LOG ANTI SPAM
    // ======================
    $update = $conn->prepare("
        INSERT INTO notif_device_log (sn, last_rx, last_voltage, last_sent)
        VALUES (?, ?, ?, NOW())
        ON DUPLICATE KEY UPDATE
            last_rx = VALUES(last_rx),
            last_voltage = VALUES(last_voltage),
            last_sent = NOW()
    ");

    $update->execute([$sn, $rx, $volt]);

    echo "✅ SENT $sn | RX:$rx | V:$volt<br>";
}